When designing and developing large integrated systems, circuits in particular, typically no one team of engineers is responsible for the entire design of the system. Instead, often teams of engineers are responsible for designs of components of the system, the overall design being the totality of the designs of the components provided by each team of engineers. As the system becomes more complex, more and more aspects of the system are divided into components and/or sub-components of the components, and the granularity of the constituent parts becomes finer, i.e., the system is composed of components, which are in turn composed of sub-components, which in turn are composed of sub-components of their own and so on. This system composed of components, which in turn include sub-components, and so forth, form a hierarchy of components. Changes to a sub-component affects the sub-component's parent component, which, in turn, affects the component's parent system. Changes to a component or to its sub-components also affects any sibling component that accesses the component or the component's sub-components.
Coordinating the work of dozens or possibly hundreds of workers is difficult. The components of the system may be software, simulated hardware, and/or products. A team working on a particular component, as they experiment, may introduce anomalies into the overall system because other components depend on the component being actively developed. Version control systems have been implemented to track these changes, allowing developers the ability to undo a change or several changes to a component, thus putting the system back into a state that was stable at an earlier time. Some examples of version control software are the open source Concurrent Versioning System (CVS) project, Visual SourceSafe® software produced by Microsoft® Corporation of Redmond, WA, and the Hierarchical Management System developed by MatrixOne® Corporation of Maynard, MA which is for Product Lifecycle Management (“PLM”).
Typically, an engineering team using existing version control software is only capable of saving a new design in its totality. Therefore, if, at a later time, the design team wishes to retrieve a previous design, the previous design is provided in its entirety. By only providing access to entire designs of components, existing software limits an engineering team's ability to use more recent components of the design, and therefore reduces their efficiency.